#include "iso.h"

int CISO7816Pad::Pad(BYTE* pData, int& iLen)
{
    if(iLen % m_iBlockSize == 0)
    {
        pData[iLen] = 0x80;
        for(int i = iLen + 1; i < m_iBlockSize; ++i)
        {
            pData[i] = 0x00;
        }
        iLen += m_iBlockSize - iLen % m_iBlockSize;
    }

    return 0;
}

int CISO7816Pad::UnPad(BYTE* pData, int& iLen)
{
    if(iLen % m_iBlockSize != 0) return -1;

    for(int i = iLen - 1; i >= 0; --i)
    {
        if(pData[i] == 0x80)
        {
            iLen = i;
            break;
        }
        else if(pData[i] != 0x00)
        {
            return -1;
        }
    }

    return 0;
}
